/**
 *
 * @author jorge
 * 
 */
package dao;

import negocio.Especialidad;
import java.sql.ResultSet;
import java.sql.SQLException;

public class EspecialidadDAO {
    
    /**************************ATRIBUTOS*************************/
    
    private Especialidad especialidad;
    
    /**************************CONSTRUCTORES*********************/
    
    public EspecialidadDAO(){        
    }
    
    public EspecialidadDAO(Especialidad especialidad){
        this.especialidad=especialidad;
    }
    
    
    /***********************METODOS*****************************/
    
    /*******************INSERT************************/
    /**
     * Metodo para INSERTAR una especialidad en la Base de datos
     * @param nombre
     * @param descripcion
     * @param noMiembros 
     */
    
    public void insertarEspecialidad(String nombre, String descripcion, int noMiembros){
        conexionDAO cbd = new conexionDAO();
        cbd.abrirConexion();        
        String query = "INSERT INTO especialidad (nombre, descripcion, noMiembros) "
                + "VALUES ('"+nombre+"','"+descripcion+"','"+noMiembros+"');";
        try{
            cbd.execute(query);
            cbd.cerrarConexion();
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }     
    }
    
    /*******************DELETE************************/
    /**
     * Metodo para ELIMINAR una especialidad en la Base de datos
     * @param nombre 
     */
    
    public void eliminarEspecialidad(String nombre){
     conexionDAO cbd = new conexionDAO();
        cbd.abrirConexion();        
        String query = "DELETE FROM especialidad WHERE nombre=\""+nombre+"\"";
        try{
            cbd.execute(query);
            cbd.cerrarConexion();
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }     
    }
    
    /*******************UPDATE************************/
    /**
     * Metodo para ACTUALIZAR una especialidad en la Base de datos
     * @param idEspecialidad
     * @param nombre
     * @param descripcion
     * @param noMiembros 
     */
    
    public void actualizarEspecialidad(int idEspecialidad, String nombre, String descripcion, int noMiembros){
    conexionDAO cbd = new conexionDAO();
        cbd.abrirConexion();        
        String query = "UPDATE especialidad "
                + "SET nombre=\""+nombre+"\", descripcion=\""+descripcion+"\", noMiembros="+noMiembros+" "
                + "WHERE idEspecialidad=\""+idEspecialidad+"\"";
        try{
            cbd.execute(query);
            cbd.cerrarConexion();
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }     
    }
  
    /*******************COUNT(*)************************/
    /**
     * Metodo para OBTENER el numero de especialidades
     * @return numero de especialidades
     */
    
    public int getNumeroEspecialidades(){
        int noEspecialidades = 0;
        conexionDAO cbd = new conexionDAO();
        cbd.abrirConexion();
        String query ="SELECT COUNT(*) FROM especialidad ;";
        try {
            ResultSet rs = cbd.consulta(query);
            while(rs.next()){
                noEspecialidades = rs.getInt("count(*)");
            }
            cbd.cerrarConexion();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
      
        return noEspecialidades;
    }
    
    /*******************SELECT************************/
    /**
     * Metodo para OBTENER una especialidad
     * @param nombre
     * @return Especialidad
     */
    
     public Especialidad buscarEspecialidad(String nombre){ 
        conexionDAO cbd = new conexionDAO();
        Especialidad negocio = new Especialidad();
        cbd.abrirConexion();    
        String query = "SELECT idEspecialidad, nombre, descripcion, noMiembros FROM especialidad WHERE nombre= '"+nombre+"'";
        try {
            ResultSet rs = cbd.consulta(query);
            while(rs.next()){
                negocio.setNombre(rs.getString("nombre"));
                negocio.setDescripcion(rs.getString("descripcion"));
                negocio.setNoMiembros(rs.getInt("noMiembros"));        
                negocio.setIdEspecialidad(rs.getInt("idEspecialidad"));
            }
            cbd.cerrarConexion();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
       return negocio;
    }
  
     /*******************SELECT************************/
     /**
      * Metodo para OBTENER una especialidad 
      * @param idEspecialidad
      * @return Especialidad
      */
     
     public Especialidad buscarEspecialidad(int idEspecialidad){
        Especialidad negocio = new Especialidad();
        conexionDAO cbd = new conexionDAO();       
        cbd.abrirConexion();
        String query = "SELECT nombre, descripcion, noMiembros FROM especialidad WHERE idEspecialidad= '"+idEspecialidad+"'";     
        try {
            ResultSet rs = cbd.consulta(query);
            while(rs.next()){
                negocio.setNombre(rs.getString("nombre"));
                negocio.setDescripcion(rs.getString("descripcion"));
                negocio.setNoMiembros(rs.getInt("noMiembros"));       
            }
            cbd.cerrarConexion();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }

       return negocio;
    }
    
     /*******************SELECT************************/
     /**
      * Metodo para OBTENER todas las especialidades 
      * @return Todas las especialidades registradas
      */
     
     public Especialidad[] obtenerEspecialidades(){
        conexionDAO cbd = new conexionDAO();      
        cbd.abrirConexion();
        String query = "SELECT idEspecialidad, nombre, descripcion, noMiembros FROM especialidad";
            try{
                ResultSet rs = cbd.consulta(query);
                ResultSet rset = cbd.consulta(query);
                int contador = 0;
                while (rset.next()) {
                    contador++;
                }
            Especialidad especialidades[] = new Especialidad[contador];    
            contador=0;
            while(rs.next())
                {
                    Especialidad negocio = new Especialidad();
                    negocio.setNombre(rs.getString("nombre"));
                    negocio.setDescripcion(rs.getString("descripcion"));
                    negocio.setNoMiembros(rs.getInt("noMiembros"));   
                    especialidades[contador] =new Especialidad();
                    especialidades[contador] = negocio;
                    contador++;
                }
                cbd.cerrarConexion();
                return especialidades;
            } catch (SQLException e) {
                System.out.println(e.getMessage());
            }
        return null;
    }
    
/*    
public static void main (String [] args){
    EspecialidadDAO esp = new EspecialidadDAO();
    Especialidad es= new Especialidad();
    es=esp.buscarEspecialidad("jardineria");
    System.out.println(es.getIdEspecialiadad());
    System.out.println(es.getNombre());
    System.out.println(es.getDescripcion());    
    System.out.println(esp.getNumeroEspecialidades());
   /* esp.insertarEspecialidad("prueba", "que espero que funcione almenos",1000);
    esp.eliminarEspecialidad("prueba");
    esp.actualizarEspecialidad(11,"nuevoName","se supone que cambio",9);
    for (int i=0 ;i<esp.getNumeroEspecialidades();i++){    
        System.out.println(esp.obtenerEspecialidades()[i].getNombre());
     }

}   
*/    
}
